package net.eyra.struts;

import java.io.IOException;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.eyra.negocio.aplicacion.Seguridad;
import net.eyra.negocio.dao.EyraDaoException;
import net.eyra.negocio.entidades.gestion.Funcionalidad;
import net.eyra.negocio.entidades.gestion.Menu;
import net.eyra.negocio.entidades.gestion.Usuario;

import org.apache.struts.action.RequestProcessor;

public class ValidarSesion extends RequestProcessor {

    @Override
    public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        if (request.getRequestURI().equalsIgnoreCase("/SeguridadAction.do")) super.process(request, response);
        else {
            if (request.getRemoteAddr().equals("127.0.0.1")) {
                if (request.getSession().getAttribute("usuario") == null || !Usuario.class.isInstance(request.getSession().getAttribute("usuario"))) {
                    try {
                        Seguridad seguridad = new Seguridad();
                        Usuario _usuario = seguridad.ValidarUsuario("jorge", "jmr", request.getRemoteAddr());
                        request.getSession().setAttribute("funcionalidades", FuncionalidadesUsuario(_usuario));
                        request.getSession().setAttribute("usuario", _usuario);
                    } catch (EyraDaoException ex) {
                    }
                }
                super.process(request, response);
            } else {
                if (request.getSession().getAttribute("usuario") == null || !Usuario.class.isInstance(request.getSession().getAttribute("usuario"))) response.sendRedirect("/SeguridadAction.do?metodo=Salir");
                else super.process(request, response);
            }
        }
    }

    private Properties FuncionalidadesUsuario(Usuario usuario) {
        Properties _funcionalidades = new Properties();

        List<Funcionalidad> funcionalidades = usuario.getGrupo().getFuncionalidades();

        for (int x = 0; x < funcionalidades.size(); x++) {
            Funcionalidad funcionalidad = funcionalidades.get(x);
            for (int y = 0; y < funcionalidad.getMenus().size(); y++) {
                Menu menu = funcionalidad.getMenus().get(y);
                _funcionalidades.setProperty(menu.getTitulo(), "true");
            }
        }

        return _funcionalidades;
    }
}
